#pragma once

#include <vector>
#include <iostream>
#include <deque>
#include <algorithm>
#include <assert.h>
#include <list>

inline void Print(const std::vector<int> &list)
{
    for (auto d : list)
        printf("%d ", d);
    printf("\n");
}

inline void Print(const std::list<int> &list)
{
    for (auto d : list)
        printf("%d ", d);
    printf("\n");
}

/// @brief 生成[0, max-1]范围内的num个随机数
/// @param max 随机数范围上限
/// @param num 需要的随机数的个数
/// @param res 存储结果
void GenerateRandomNumber(int max, int num, std::vector<int> &res)
{
    // 生成第一个随机数，由于为模运算，所以生成的数在[0, max-1]范围内
    res.push_back(rand() % max);
    // size表示当前已生成的个数
    int size = 1;
    while (1)
    {
        bool reduplicate = false;
        int val = rand() % max;
        // size表示已经生成的个数，这里for就是遍历所有已经生成的数，然后比较上面生成的val是否与已生成的数重复
        for (int j = 0; j < size; j++)
        {
            if (res[j] == val)
            {
                reduplicate = true;
                break;
            }
        }
        if (!reduplicate)
        {
            // 未重复，保存随机数
            res.push_back(val);
            size++;
        }
        if (size == num)
        {
            // 个数满，结束while
            break;
        }
        // 如果重复且个数未满，则继续生成随机数
    }
}
